Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>Algorithmique</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/Algorithmique"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.math.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Algorithmique rootpage-Algorithmique skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Algorithmique</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr">
<p>L'<b>algorithmique</b> est l'étude et la production de règles et techniques qui sont impliquées dans la définition et la conception d'<a href="Algorithme" title="Algorithme">algorithmes</a>, c'est-à-dire de processus systématiques de résolution d'un problème permettant de décrire précisément des étapes pour résoudre un <a href="Probl%C3%A8me_algorithmique" title="Problème algorithmique">problème algorithmique</a>.
</p>

<div class="mw-heading mw-heading2"><h2 id="Étymologie"><span id=".C3.89tymologie"></span>Étymologie</h2></div>
<p>Le mot «&nbsp;algorithme&nbsp;» vient du nom du <a href="Math%C3%A9maticien" title="Mathématicien">mathématicien</a> <a href="Al-Khw%C3%A2rizm%C3%AE" title="Al-Khwârizmî">Al-Khwârizmî</a><sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> (latinisé au <a href="Moyen_%C3%82ge" title="Moyen Âge">Moyen Âge</a> en <span class="lang-la" lang="la"><i>Algoritmi</i></span>), qui, au <a href="IXe_si%C3%A8cle" title="IXe siècle"><abbr class="abbr" title="9ᵉ siècle"><span class="romain">IX</span><sup style="font-size:72%">e</sup></abbr>&nbsp;siècle</a> écrivit <a href="Abr%C3%A9g%C3%A9_du_calcul_par_la_restauration_et_la_comparaison" title="Abrégé du calcul par la restauration et la comparaison">le premier ouvrage systématique</a> donnant des solutions aux <a href="%C3%89quation_lin%C3%A9aire" title="Équation linéaire">équations linéaires</a> et <a href="%C3%89quation_du_second_degr%C3%A9" title="Équation du second degré">quadratiques</a>. Le h muet, non justifié par l'étymologie, vient d’une déformation par rapprochement avec le grec <span class="lang-el" lang="el">ἀριθμός</span> (arithmós)<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>. «&nbsp;Algorithme&nbsp;» a donné «&nbsp;algorithmique&nbsp;». Le synonyme «&nbsp;algorithmie&nbsp;», vieux mot utilisé par exemple par <a href="Josef_Ho%C3%ABn%C3%A9-Wronski" title="Josef Hoëné-Wronski">Wronski</a> en 1811<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>, est encore parfois utilisé<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Histoire">Histoire</h2></div>

<div class="mw-heading mw-heading3"><h3 id="Antiquité"><span id="Antiquit.C3.A9"></span>Antiquité</h3></div>
<p>Les premiers algorithmes dont on a retrouvé des descriptions datent des <a href="Babylone" title="Babylone">Babyloniens</a>, au <a href="IIIe_mill%C3%A9naire_av._J.-C." title="IIIe millénaire av. J.-C."><abbr class="abbr" title="3ᵉ millénaire">III<sup>e</sup></abbr>&nbsp;millénaire&nbsp;<abbr class="abbr nowrap" title="avant Jésus-Christ">av. J.-C.</abbr></a>. Ils décrivent des méthodes de <a href="Calcul_(math%C3%A9matiques)" title="Calcul (mathématiques)">calcul</a> et des résolutions d'<a href="%C3%89quation" title="Équation">équations</a> à l'aide d'exemples<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup class="reference cite_virgule">,</sup><sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>.
</p><p>Un algorithme célèbre est celui qui se trouve dans le <span class="nowrap">livre 7</span> des <i><a href="Algorithme_d'Euclide" title="Algorithme d'Euclide">Éléments d'Euclide</a></i>, et appelé <a href="Algorithme_d'Euclide" title="Algorithme d'Euclide">algorithme d'Euclide</a>. Il permet de trouver le plus grand diviseur commun, ou <a href="Plus_grand_commun_diviseur" title="Plus grand commun diviseur">PGCD</a>, de deux nombres. Un point particulièrement remarquable est qu’il contient explicitement une <a href="It%C3%A9ration" title="Itération">itération</a> et que les <span class="nowrap">propositions 1</span> et 2 démontrent sa <a href="Correction_d'un_algorithme" title="Correction d'un algorithme">correction</a>.
</p><p>C'est <a href="Archim%C3%A8de" title="Archimède">Archimède</a> qui proposa le premier un algorithme pour le calcul de <span class="texhtml"><a href="Pi" title="Pi">π</a></span><sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>.
</p>
<div class="mw-heading mw-heading3"><h3 id="Étude_systématique"><span id=".C3.89tude_syst.C3.A9matique"></span>Étude systématique</h3></div>
<p>Le premier à avoir systématisé des algorithmes est le mathématicien <a href="Persans" title="Persans">perse</a> <a href="Al-Khw%C3%A2rizm%C3%AE" title="Al-Khwârizmî">Al-Khwârizmî</a>, actif entre 813 et 833. Dans son ouvrage <i><a href="Abr%C3%A9g%C3%A9_du_calcul_par_la_restauration_et_la_comparaison" title="Abrégé du calcul par la restauration et la comparaison">Abrégé du calcul par la restauration et la comparaison</a></i>, il étudie toutes les <a href="%C3%89quation_du_second_degr%C3%A9" title="Équation du second degré">équations du second degré</a> et en donne la résolution par des algorithmes généraux. Il utilise des méthodes semblables à celles des <a href="Math%C3%A9matiques_babyloniennes" class="mw-redirect" title="Mathématiques babyloniennes">Babyloniens</a>, mais se différencie par ses explications systématiques là où les Babyloniens donnaient seulement des exemples.
</p><p>Le savant <a href="Al-Andalus" title="Al-Andalus">andalou</a> <a href="Averro%C3%A8s" title="Averroès">Averroès</a> (<a href="1126" title="1126">1126</a>-<a href="1198" title="1198">1198</a>) évoque une méthode de <a href="Raisonnement" title="Raisonnement">raisonnement</a> où la thèse s’affine étape par étape, itérativement, jusqu’à une certaine convergence et ceci conformément au déroulement d’un algorithme. À la même époque, au <a href="XIIe_si%C3%A8cle" title="XIIe siècle"><abbr class="abbr" title="12ᵉ siècle"><span class="romain">XII</span><sup style="font-size:72%">e</sup></abbr>&nbsp;siècle</a>, le moine <a href="Adelard_de_Bath" class="mw-redirect" title="Adelard de Bath">Adelard de Bath</a> introduit le terme <a href="Latin" title="Latin">latin</a> de <span class="lang-la" lang="la"><i>algorismus</i></span>, par référence au nom de Al Khuwarizmi. Ce mot donne <i>algorithme</i> en français en <a href="1554" title="1554">1554</a>.
</p><p>Au <a href="XVIIe_si%C3%A8cle" title="XVIIe siècle"><abbr class="abbr" title="17ᵉ siècle"><span class="romain">XVII</span><sup style="font-size:72%">e</sup></abbr>&nbsp;siècle</a>, on pourrait entrevoir une certaine allusion à la méthode algorithmique chez <a href="Ren%C3%A9_Descartes" title="René Descartes">René Descartes</a> dans la méthode générale proposée par le <a href="Discours_de_la_m%C3%A9thode" title="Discours de la méthode">Discours de la méthode</a> (<a href="1637" title="1637">1637</a>), notamment quand, en sa deuxième partie, le mathématicien français propose de <span class="citation">«&nbsp;diviser chacune des difficultés que j’examinerois, en autant de parcelles qu’il se pourroit, et qu’il seroit requis pour les mieux résoudre&nbsp;»</span>. Sans évoquer explicitement les concepts de boucle, d’itération ou de <a href="Recherche_dichotomique" title="Recherche dichotomique">dichotomie</a>, l’approche de Descartes prédispose la logique à accueillir le concept de <a href="Programme_informatique" title="Programme informatique">programme</a>, mot qui naît en français en <a href="1677" title="1677">1677</a>.
</p><p>En 1843 , la mathématicienne et pionnière des <a href="Informatique" title="Informatique">sciences informatique</a> <a href="Ada_Lovelace" title="Ada Lovelace">Ada Lovelace</a>, fille de <a href="Lord_Byron" title="Lord Byron">Lord Byron</a> et assistante de <a href="Charles_Babbage" title="Charles Babbage">Charles Babbage</a> réalise la première <a href="Mise_en_%C5%93uvre" title="Mise en œuvre">implémentation</a> d'un algorithme sous forme de programme (calcul des <a href="Nombre_de_Bernoulli" title="Nombre de Bernoulli">nombres de Bernoulli</a>)<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>.
</p><p>Le <a href="Dixi%C3%A8me_probl%C3%A8me_de_Hilbert" title="Dixième problème de Hilbert">dixième problème de Hilbert</a> qui fait partie de la liste des <span class="nowrap">23 <a href="Probl%C3%A8mes_de_Hilbert" title="Problèmes de Hilbert">problèmes</a></span> posés par <a href="David_Hilbert" title="David Hilbert">David Hilbert</a> en 1900 à Paris est clairement un problème algorithmique. En l'occurrence, la réponse est qu'il n'y a pas d'algorithme répondant au problème posé.
</p>
<div class="mw-heading mw-heading3"><h3 id="Époque_contemporaine"><span id=".C3.89poque_contemporaine"></span>Époque contemporaine</h3></div>
<p>L’algorithmique des <abbr class="abbr" title="20ᵉ siècle"><span class="romain">XX</span><sup style="font-size:72%">e</sup></abbr> et <abbr class="abbr" title="21ᵉ siècle"><span class="romain">XXI</span><sup style="font-size:72%">e</sup></abbr>&nbsp;siècles a pour fondement mathématique des formalismes, par exemple celui des <a href="Machines_de_Turing" class="mw-redirect" title="Machines de Turing">machines de Turing</a>, qui permettent de définir précisément ce qu'on entend par «&nbsp;étapes&nbsp;», par «&nbsp;précis&nbsp;» et par «&nbsp;non ambigu&nbsp;» et qui donnent un cadre scientifique pour étudier les propriétés des algorithmes. Cependant, suivant le formalisme choisi on obtient des approches algorithmiques différentes pour résoudre un même problème. Par exemple l'<a href="Algorithme_r%C3%A9cursif" title="Algorithme récursif">algorithmique récursive</a>, l'<a href="Algorithme_parall%C3%A8le" class="mw-redirect" title="Algorithme parallèle">algorithmique parallèle</a> ou l’<a href="Informatique_quantique" title="Informatique quantique">informatique quantique</a> donnent lieu à des présentations d'algorithmes différentes de celles de l'algorithmique itérative.
</p><p>L'algorithmique s'est surtout développée dans la deuxième moitié du <abbr class="abbr" title="20ᵉ siècle"><span class="romain">XX</span><sup style="font-size:72%">e</sup></abbr>&nbsp;siècle, comme support conceptuel de la programmation des ordinateurs, dans le cadre du développement de l'informatique pendant cette période. <a href="Donald_Knuth" title="Donald Knuth">Donald Knuth</a>, auteur du traité <i><a href="The_Art_of_Computer_Programming" title="The Art of Computer Programming">The Art of Computer Programming</a></i> qui décrit de très nombreux algorithmes, a contribué, avec d'autres, à poser les fondements mathématiques de leur analyse.
</p>
<div class="mw-heading mw-heading2"><h2 id="Vocabulaire">Vocabulaire</h2></div>
<p>Le substantif <i>algorithmique</i> désigne l'ensemble des méthodes permettant de créer des algorithmes. Le terme est également employé comme adjectif.
</p><p>Un <i>algorithme</i> énonce une solution à un problème sous la forme d’un enchaînement d’<i>opérations à effectuer</i>.
</p><p>Les informaticiens utilisent fréquemment l’anglicisme <i>implémentation</i> pour désigner la mise en œuvre de l'algorithme dans un <a href="Langage_de_programmation" title="Langage de programmation">langage de programmation</a>. Cette implémentation réalise la transcription des opérations constitutives de l’algorithme et précise la façon dont ces opérations sont invoquées. Cette écriture en <a href="Langage_informatique" title="Langage informatique">langage informatique</a>, est aussi fréquemment désignée par le terme de «&nbsp;<i><a href="Codage_(programmation)" class="mw-redirect" title="Codage (programmation)">codage</a></i>&nbsp;»<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>. On parle de <i>«&nbsp;<a href="Code_source" title="Code source">code source</a>&nbsp;»</i> pour désigner le texte, constituant le programme, réalisant l’algorithme. Le <i>code</i> est plus ou moins détaillé selon le niveau d’abstraction du langage utilisé, de même qu'une recette de cuisine doit être plus ou moins détaillée selon l’expérience du cuisinier.
</p>
<div class="mw-heading mw-heading2"><h2 id="Étude_formelle_des_problèmes_algorithmiques"><span id=".C3.89tude_formelle_des_probl.C3.A8mes_algorithmiques"></span>Étude formelle des problèmes algorithmiques</h2></div>

<p>Dans le but de mieux comprendre comment les <a href="Probl%C3%A8me_de_d%C3%A9cision" title="Problème de décision">problèmes</a> se placent les uns par rapport aux autres, la théorie de la complexité établit des hiérarchies de difficulté entre les problèmes algorithmiques, dont les niveaux sont appelés des <a href="Classe_de_complexit%C3%A9" title="Classe de complexité">classe de complexité</a>.
</p><p>Les deux classes les plus connues étant la classe <a href="P_(complexit%C3%A9)" title="P (complexité)">P</a> des problèmes pour lesquels il existe des <a href="Algorithme" title="Algorithme">algorithmes</a> pouvant les résoudre en temps <a href="Polynomial" class="mw-redirect" title="Polynomial">polynomial</a>, et la classe <a href="NP_(complexit%C3%A9)" title="NP (complexité)">NP</a> celle des problèmes pour lesquels il existe des algorithmes pouvant les résoudre en temps polynomial mais en faisant des choix <a href="D%C3%A9terminisme_(calculabilit%C3%A9)" title="Déterminisme (calculabilité)">non-déterministes</a>. Un problème non résolu de l'étude formelle des problèmes algorithmiques étant le <a href="Probl%C3%A8me_P_%E2%89%9F_NP" title="Problème P ≟ NP">problème P ≟ NP</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Étude_formelle_des_algorithmes"><span id=".C3.89tude_formelle_des_algorithmes"></span>Étude formelle des algorithmes</h2></div>
<p>De nombreux outils formels ou théoriques ont été développés pour décrire les algorithmes, les étudier, exprimer leurs qualités, pouvoir les comparer&nbsp;:
</p>
<ul><li>ainsi, pour décrire les algorithmes, des structures algorithmiques ont été mises en évidence&nbsp;: structures de contrôle et structures de données&nbsp;;</li>
<li>pour justifier de la qualité des algorithmes, les notions de correction, de <a href="Complet_(complexit%C3%A9)" title="Complet (complexité)">complétude</a> et de terminaison ont été mises en place&nbsp;;</li>
<li>enfin, pour comparer les algorithmes, une <a href="Th%C3%A9orie_de_la_complexit%C3%A9_(informatique_th%C3%A9orique)" title="Théorie de la complexité (informatique théorique)">théorie de la complexité</a> des algorithmes a été définie.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Structures_algorithmiques">Structures algorithmiques</h3></div>
<p>Les concepts en œuvre en algorithmique, par exemple selon l'approche de <a href="Niklaus_Wirth" title="Niklaus Wirth">N. Wirth</a> pour les langages les plus répandus (<a href="Pascal_(langage)" title="Pascal (langage)">Pascal</a>, <a href="C_(langage)" title="C (langage)">C</a>,&nbsp;<abbr class="abbr" title="et cetera">etc.</abbr>), sont en petit nombre. Ils appartiennent à deux classes&nbsp;:
</p>
<ul><li>les <a href="Structure_de_contr%C3%B4le" title="Structure de contrôle">structures de contrôle</a>&nbsp;:
<ul><li>séquences,</li>
<li>conditionnelles,</li>
<li>boucles&nbsp;;</li></ul></li>
<li>les <a href="Structure_de_donn%C3%A9es" title="Structure de données">structures de données</a>&nbsp;:
<ul><li><a href="Constante" title="Constante">constantes</a>,</li>
<li><a href="Variable_(informatique)" title="Variable (informatique)">variables</a>,</li>
<li><a href="Tableau_(structure_de_donn%C3%A9es)" title="Tableau (structure de données)">tableaux</a>&nbsp;;</li>
<li>structures récursives (listes, arbres, graphes).</li></ul></li></ul>
<p>Ce découpage est parfois difficile à percevoir pour certains langages (<a href="Lisp_(langage)" class="mw-redirect" title="Lisp (langage)">Lisp</a>, <a href="Prolog" title="Prolog">Prolog</a>…) plus basés sur la notion de <a href="Algorithme_r%C3%A9cursif" title="Algorithme récursif">récursivité</a> où certaines structures de contrôle sont implicites et, donc, semblent disparaître.
</p>
<div class="mw-heading mw-heading3"><h3 id="Correction,_complétude,_terminaison"><span id="Correction.2C_compl.C3.A9tude.2C_terminaison"></span>Correction, complétude, terminaison</h3></div>
<p>Ces trois notions «&nbsp;correction&nbsp;», «&nbsp;complétude&nbsp;», «&nbsp;terminaison&nbsp;» sont liées, et supposent qu'un algorithme est écrit pour résoudre un problème.
</p><p>La <a href="Terminaison_d'un_algorithme" title="Terminaison d'un algorithme">terminaison</a> est l'assurance que l'algorithme se terminera en un temps fini. Les preuves le plus simples de terminaison font intervenir une fonction à valeurs entières positives strictement décroissante à chaque «&nbsp;pas&nbsp;» de l'algorithme.
</p><p>Étant donné la garantie qu'un algorithme se terminera, la preuve de correction doit apporter l'assurance que si l'algorithme se termine en donnant un résultat, alors ce résultat est effectivement une solution au problème posé. Les preuves de correction font intervenir une spécification logique que doivent vérifier les solutions du problème. La preuve de correction consiste donc à montrer que les résultats de l'algorithme satisfait cette spécification.
</p><p>La preuve de complétude garantit que, pour un espace de problèmes donné, l'algorithme, s'il se termine, donnera l'ensemble des solutions de l'espace du problème. Les preuves de complétude demandent à identifier l'espace du problème et l'espace des solutions pour ensuite montrer que l'algorithme produit bien le second à partir du premier.
</p>
<div class="mw-heading mw-heading3"><h3 id="Analyse_de_la_complexité_des_algorithmes"><span id="Analyse_de_la_complexit.C3.A9_des_algorithmes"></span>Analyse de la complexité des algorithmes</h3></div>

<p>Les principales notions mathématiques dans le calcul du coût d’un algorithme précis sont les <a href="Notation_de_Landau" class="mw-redirect" title="Notation de Landau">notions de domination</a> (notée <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(f(n))}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mi>f</mi>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(f(n))}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/b542fd82a0f56d028c3c3cfb30a8946651658407.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:8.142ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}(f(n))}" loading="lazy"></span>, «&nbsp;grand o&nbsp;»), où <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle f}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>f</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle f}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/132e57acb643253e7810ee9702d9581f159a1c61.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:1.279ex; height:2.509ex;" alt="{\displaystyle f}" loading="lazy"></span> est une <a href="Fonction_math%C3%A9matique" class="mw-redirect" title="Fonction mathématique">fonction mathématique</a> de <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>n</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle n}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/a601995d55609f2d9f5e233e36fbe9ea26011b3b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.395ex; height:1.676ex;" alt="{\displaystyle n}" loading="lazy"></span>, variable désignant la quantité d’informations (en <a href="Bit" title="Bit">bits</a>, en nombre d’enregistrements,&nbsp;<abbr class="abbr" title="et cetera">etc.</abbr>) manipulée dans l’algorithme. En algorithmique on trouve souvent des complexités du type&nbsp;:
</p>
<table class="wikitable">
<tbody><tr>
<th>Notation
</th>
<th>Type de complexité
</th></tr>
<tr>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(1)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(1)}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/5aeb15c854068604d35a2dd82a925899fafd3690.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.822ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}(1)}" loading="lazy"></span>
</td>
<td>complexité constante (indépendante de la taille de la donnée)
</td></tr>
<tr>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(\log(n))}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mi>log</mi>
<mo>⁡<!-- ⁡ --></mo>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(\log(n))}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/2bf87bc27d757eed469fb13535c6243b51d0e330.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:9.835ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}(\log(n))}" loading="lazy"></span>
</td>
<td>complexité logarithmique
</td></tr>
<tr>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(n)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(n)}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/3c7bbe0124ae81792773344bc8709fc2f9c9910d.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:5.054ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}(n)}" loading="lazy"></span>
</td>
<td>complexité linéaire
</td></tr>
<tr>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(n\log(n))}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mi>log</mi>
<mo>⁡<!-- ⁡ --></mo>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(n\log(n))}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/75ac2d2b1318fe271226ab13f0eb6c0129df930f.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:11.617ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}(n\log(n))}" loading="lazy"></span>
</td>
<td>complexité quasi linéaire
</td></tr>
<tr>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(n^{2})}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<msup>
<mi>n</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(n^{2})}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/4441d9689c0e6b2c47994e2f587ac5378faeefba.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:6.108ex; height:3.176ex;" alt="{\displaystyle {\mathcal {O}}(n^{2})}" loading="lazy"></span>
</td>
<td>complexité quadratique
</td></tr>
<tr>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(n^{3})}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<msup>
<mi>n</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>3</mn>
</mrow>
</msup>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(n^{3})}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/ff78e74de3bf7a5246829c66bc5acf0c2a94b67c.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:6.108ex; height:3.176ex;" alt="{\displaystyle {\mathcal {O}}(n^{3})}" loading="lazy"></span>
</td>
<td>complexité cubique
</td></tr>
<tr>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(n^{p})}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<msup>
<mi>n</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>p</mi>
</mrow>
</msup>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(n^{p})}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/5776a9cabfbd4ef16e0f71be13f5a13d06d252ce.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:6.113ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}(n^{p})}" loading="lazy"></span>
</td>
<td>complexité polynomiale
</td></tr>
<tr>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(n^{\log(n)})}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<msup>
<mi>n</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>log</mi>
<mo>⁡<!-- ⁡ --></mo>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
</mrow>
</msup>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(n^{\log(n)})}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/4c7c888c6b9e13ea3988266da7cf96e8532048e1.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:9.653ex; height:3.343ex;" alt="{\displaystyle {\mathcal {O}}(n^{\log(n)})}" loading="lazy"></span>
</td>
<td>complexité quasi polynomiale
</td></tr>
<tr>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(2^{n})}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<msup>
<mn>2</mn>
<mrow class="MJX-TeXAtom-ORD">
<mi>n</mi>
</mrow>
</msup>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(2^{n})}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/9e36948445d0efd3f0b41d0bd7d281571e72492d.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:6.04ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}(2^{n})}" loading="lazy"></span>
</td>
<td>complexité exponentielle
</td></tr>
<tr>
<td><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathcal {O}}(n!)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mrow class="MJX-TeXAtom-ORD">
<mi class="MJX-tex-caligraphic" mathvariant="script">O</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mi>n</mi>
<mo>!</mo>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\mathcal {O}}(n!)}</annotation>
</semantics>
</math></span><img src="./_assets_/eb734a37dd21ce173a46342d1cc64c92/199afcba8c7b68971f7f8d4c58a3f9cd1fbdb9b6.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:5.701ex; height:2.843ex;" alt="{\displaystyle {\mathcal {O}}(n!)}" loading="lazy"></span>
</td>
<td>complexité factorielle
</td></tr></tbody></table>
<p>Sans entrer dans les détails mathématiques, le calcul de l’efficacité d’un algorithme (sa <i><a href="Analyse_de_la_complexit%C3%A9_des_algorithmes" title="Analyse de la complexité des algorithmes">complexité algorithmique</a></i>) consiste en la recherche de deux quantités importantes. La première quantité est l’évolution du nombre d’instructions de base en fonction de la quantité de données à traiter (par exemple, pour un <a href="Algorithme_de_tri" title="Algorithme de tri">algorithme de tri</a>, il s'agit du nombre de données à trier), que l’on privilégiera sur le temps d'exécution mesuré en secondes (car ce dernier dépend de la machine sur laquelle l'algorithme s'exécute). La seconde quantité estimée est la quantité de mémoire nécessaire pour effectuer les calculs. Baser le calcul de la complexité d’un algorithme sur le temps ou la quantité effective de mémoire qu’un ordinateur particulier prend pour effectuer ledit algorithme ne permet pas de prendre en compte la structure interne de l’algorithme, ni la particularité de l’ordinateur&nbsp;: selon sa charge de travail, la vitesse de son processeur, la vitesse d’accès aux données, l’exécution de l’algorithme (qui peut faire intervenir le hasard) ou son organisation de la mémoire, le temps d’exécution et la quantité de mémoire ne seront pas les mêmes.
</p><p>Souvent, on examine les performances «&nbsp;au pire&nbsp;», c'est-à-dire dans les configurations telles que le <a href="Complexit%C3%A9_en_temps" title="Complexité en temps">temps d'exécution</a> ou l'<a href="Complexit%C3%A9_en_espace" title="Complexité en espace">espace mémoire</a> est le plus grand. Il existe également un autre aspect de l'évaluation de l'efficacité d'un algorithme&nbsp;: les performances «&nbsp;en moyenne&nbsp;». Cela suppose d'avoir un modèle de la répartition statistique des données de l'algorithme, tandis que la mise en œuvre des techniques d'analyse implique des méthodes assez fines de <a href="Analyse_combinatoire" class="mw-redirect" title="Analyse combinatoire">combinatoire</a> et d'<a href="D%C3%A9veloppement_asymptotique" title="Développement asymptotique">évaluation asymptotique</a>, utilisant en particulier les <a href="S%C3%A9rie_g%C3%A9n%C3%A9ratrice" title="Série génératrice">séries génératrices</a> et des méthodes avancées d'<a href="Analyse_complexe" title="Analyse complexe">analyse complexe</a>. L'ensemble de ces méthodes est regroupé sous le nom de <a href="Combinatoire_analytique" title="Combinatoire analytique">combinatoire analytique</a>.
</p>
<div class="mw-heading mw-heading4"><h4 id="Quelques_indications_sur_l’efficacité_des_algorithmes_et_ses_biais"><span id="Quelques_indications_sur_l.E2.80.99efficacit.C3.A9_des_algorithmes_et_ses_biais"></span>Quelques indications sur l’efficacité des algorithmes et ses biais</h4></div>
<p>L'efficacité algorithmique n’est souvent connue que de manière asymptotique, c’est-à-dire pour de grandes valeurs du paramètre <i>n</i>. Lorsque ce paramètre est suffisamment petit, un algorithme de complexité asymptotique plus grande peut en pratique être plus efficace. Ainsi, pour trier un tableau de 30&nbsp;lignes (c’est un paramètre de petite taille), il est inutile d’utiliser un algorithme évolué comme le <a href="Tri_rapide" title="Tri rapide">tri rapide</a> (l’un des algorithmes de tri asymptotiquement les plus efficaces en moyenne)&nbsp;: l’algorithme de tri le plus simple à écrire sera suffisamment efficace.
</p><p>Entre deux algorithmes informatiques de complexité identique, on utilisera celui dont l’occupation mémoire est moindre. L’analyse de la complexité algorithmique peut également servir à évaluer l’occupation mémoire d’un algorithme. Enfin, le choix d’un algorithme plutôt qu’un autre doit se faire en fonction des données que l’on s’attend à lui fournir en entrée. Ainsi, le <a href="Tri_rapide" title="Tri rapide">tri rapide</a>, lorsque l’on choisit le premier élément comme pivot, se comporte de façon désastreuse si on l’applique à une liste de valeurs déjà triée. Il n’est donc pas judicieux de l’utiliser si on prévoit que le programme recevra en entrée des listes déjà presque triées ou alors il faudra choisir le pivot aléatoirement.
</p><p>D'autres paramètres à prendre en compte sont notamment&nbsp;:
</p>
<ul><li>les <a href="Biais_(statistique)" title="Biais (statistique)">biais</a> intrinsèques (acceptés ou involontaires) de nombreux algorithmes peuvent tromper les utilisateurs ou systèmes d'<a href="Intelligence_artificielle" title="Intelligence artificielle">intelligence artificielle</a>, de <i><a href="Machine_learning" class="mw-redirect" title="Machine learning">machine learning</a></i>, de diagnostic informatique, mécanique, <a href="Diagnostic_m%C3%A9dical" class="mw-redirect" title="Diagnostic médical">médical</a>, de prévision, de prévention, de sondages ou d'<a href="Aide_%C3%A0_la_d%C3%A9cision" title="Aide à la décision">aide à la décision</a> (notamment pour les <a href="R%C3%A9seaux_sociaux" class="mw-redirect" title="Réseaux sociaux">réseaux sociaux</a>, l'éducation [ex&nbsp;: <a href="Parcoursup" title="Parcoursup">parcoursup</a> ], la médecine, la justice, la police, l'armée, la politique, l'embauche…) prenant mal en compte ou pas du tous ces biais<sup id="cite_ref-hertel2019_10-0" class="reference"><a href="#cite_note-hertel2019-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup>. En 2019, des chercheurs de <a href="T%C3%A9l%C3%A9com_ParisTech" class="mw-redirect" title="Télécom ParisTech">Télécom ParisTech</a> ont produit un rapport inventoriant les principaux biais connus, et quelques pistes de remédiation<sup id="cite_ref-hertel2019_10-1" class="reference"><a href="#cite_note-hertel2019-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup></li>
<li>la <a href="M%C3%A9moire_virtuelle#Principe_de_localité" title="Mémoire virtuelle">localité</a> de l’algorithme. Par exemple pour un système à <a href="M%C3%A9moire_virtuelle" title="Mémoire virtuelle">mémoire virtuelle</a> ayant peu de <a href="M%C3%A9moire_vive" title="Mémoire vive">mémoire vive</a> (par rapport au nombre de données à traiter), le <a href="Tri_rapide" title="Tri rapide">tri rapide</a> sera normalement plus efficace que le <a href="Tri_par_tas" title="Tri par tas">tri par tas</a> car le premier ne passe qu’une seule fois sur chaque élément de la mémoire tandis que le second accède à la mémoire de manière discontinue (ce qui augmente le risque de <span class="lang-en" lang="en"><i><a href="M%C3%A9moire_virtuelle#Swapping" title="Mémoire virtuelle">swapping</a></i></span>).</li>
<li>certains algorithmes (ceux dont l'analyse de complexité est dite <a href="Analyse_amortie" title="Analyse amortie">amortie</a>), pour certaines exécutions de l’algorithme (cas marginaux), présentent une complexité qui sera très supérieure au cas moyen, mais ceci sera compensé par des exécutions rendues efficaces du même algorithme dans une suite d'invocations de cet algorithme.</li>
<li>l'<a href="Analyse_lisse_d'algorithme" title="Analyse lisse d'algorithme">Analyse lisse d'algorithme</a>, qui mesure les performances des algorithmes sur les pires cas, mais avec une légère perturbation des instances. Elle explique pourquoi certains algorithmes analysés comme inefficaces autrement, sont en fait efficaces en pratique. L'<a href="Algorithme_du_simplexe" title="Algorithme du simplexe">algorithme du simplexe</a> est un exemple d'un algorithme qui se comporte bien pour l'analyse lisse.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Approches_pratiques">Approches pratiques</h2></div>
<p>L'algorithmique a développé quelques stratégies pour résoudre les problèmes&nbsp;:
</p>
<ul><li><a href="Algorithme_glouton" title="Algorithme glouton">algorithme glouton</a>&nbsp;: un premier algorithme peut souvent être proposé en étudiant le problème très progressivement&nbsp;: on résout chaque sous-problème localement en espérant que l'ensemble de leurs résultats composera bien une solution du problème global. On parle alors d'algorithme glouton. L'algorithme glouton n'est souvent qu'une première étape dans la rédaction d'un algorithme plus performant&nbsp;;</li>
<li><a href="Diviser_pour_r%C3%A9gner_(informatique)" title="Diviser pour régner (informatique)">diviser pour régner</a>&nbsp;: pour améliorer les performances des algorithmes, une technique usuelle consiste à diviser les données d'un problème en sous-ensembles de tailles plus petites, jusqu'à obtenir des données que l'algorithme pourra traiter au cas par cas. Une seconde étape dans ces algorithmes consiste à «&nbsp;fusionner&nbsp;» les résultats partiels pour obtenir une solution globale. Ces algorithmes sont souvent associés à la récursivité&nbsp;;</li>
<li><a href="Recherche_exhaustive" title="Recherche exhaustive">recherche exhaustive</a> (ou combinatoire)&nbsp;: une méthode utilisant l'énorme puissance de calcul des ordinateurs consiste à regarder tous les cas possibles. Cela n'est pour autant possible que dans certains cas particuliers (la combinatoire est souvent plus forte que l'énorme puissance des ordinateurs, aussi énorme soit-elle)&nbsp;;</li>
<li>décomposition <i>top-down</i> / <i>bottom-up</i>&nbsp;: (décomposition descendante, décomposition remontante) les décompositions <i>top-down</i> consistent à essayer de décomposer le problème en sous-problèmes à résoudre successivement, la décomposition allant jusqu'à des problèmes triviaux faciles à résoudre. L'algorithme global est alors donné par la composée des algorithmes définis au cours de la décomposition. La démarche <i>bottom-up</i> est la démarche inverse, elle consiste à partir d'algorithmes simples, ne résolvant qu'une étape du problème, pour essayer de les composer pour obtenir un algorithme global&nbsp;;</li>
<li>pré-traitement / post-traitement&nbsp;: parfois, certains algorithmes comportent une ou deux phases identifiées comme des pré-traitements (à faire avant l'algorithme principal), ou post-traitement (à faire après l'algorithme principal), pour simplifier l'écriture de l'algorithme général&nbsp;;</li>
<li><a href="Programmation_dynamique" title="Programmation dynamique">programmation dynamique</a>&nbsp;: elle s'applique lorsque le problème d'optimisation est composé de plusieurs sous-problèmes de même nature, et qu'une solution optimale du problème global s'obtient à partir de solutions optimales des sous-problèmes.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Les_heuristiques">Les heuristiques</h3></div>

<p>Pour certains problèmes, les algorithmes ont une complexité beaucoup trop grande pour obtenir un résultat en temps raisonnable, même si l’on pouvait utiliser une puissance de calcul phénoménale. On est donc amené à rechercher la solution de façon non systématique (<a href="Algorithme_de_Las_Vegas" title="Algorithme de Las Vegas">algorithme de Las Vegas</a>) ou de se contenter d'une solution la plus proche possible d’une solution optimale en procédant par essais successifs (<a href="Algorithme_de_Monte-Carlo" title="Algorithme de Monte-Carlo">algorithme de Monte-Carlo</a>). Puisque toutes les combinaisons ne peuvent être essayées, certains choix stratégiques doivent être faits. Ces choix, généralement très dépendants du problème traité, constituent ce qu’on appelle une <a href="Heuristique_(math%C3%A9matiques)" title="Heuristique (mathématiques)">heuristique</a>. Le but d’une heuristique n'est donc pas d'essayer toutes les combinaisons possibles, mais de trouver une solution en un temps raisonnable et par un autre moyen, par exemple en procédant à des tirages aléatoires. La solution peut être exacte (Las Vegas) ou approchée (Monte-Carlo). Les <i>algorithmes d'Atlantic City</i> quant à eux donnent de façon probablement efficace une réponse probablement juste (disons avec une chance sur cent millions de se tromper) à la question posée.
</p><p>C’est ainsi que les programmes de <a href="%C3%89checs" title="Échecs">jeu d’échecs</a> ou de <a href="Jeu_de_go" class="mw-redirect" title="Jeu de go">jeu de go</a> (pour ne citer que ceux-là) font appel de manière très fréquente à des heuristiques qui modélisent l’expérience d’un joueur. Certains <a href="Logiciel_antivirus" title="Logiciel antivirus">logiciels antivirus</a> se basent également sur des heuristiques pour reconnaître des <a href="Virus_informatique" title="Virus informatique">virus informatiques</a> non répertoriés dans leur base, en s’appuyant sur des ressemblances avec des virus connus, c'est un exemple d'algorithme d'Atlantic City. De même le <a href="Probl%C3%A8me_SAT" title="Problème SAT">problème SAT</a> qui est l'archétype du <a href="Probl%C3%A8me_NP-complet" title="Problème NP-complet">problème NP-complet</a> donc très difficile est résolu de <a href="Probl%C3%A8me_SAT#Algorithmes_pour_SAT" title="Problème SAT">façon pratique et efficace par la mise au point d'heuristiques</a><sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Exemples_d’algorithmes,_de_problèmes,_d'applications_ou_domaines_d'application"><span id="Exemples_d.E2.80.99algorithmes.2C_de_probl.C3.A8mes.2C_d.27applications_ou_domaines_d.27application"></span>Exemples d’algorithmes, de problèmes, d'applications ou domaines d'application</h2></div>
<p>Il existe un certain nombre d’algorithmes classiques, utilisés pour résoudre des problèmes ou plus simplement pour illustrer des méthodes de programmation. On se référera aux articles suivants pour de plus amples détails (voir aussi <a href="Liste_des_algorithmes" class="mw-redirect" title="Liste des algorithmes">liste des algorithmes</a>)&nbsp;:
</p>
<ul><li>algorithmes ou problèmes classiques (du plus simple ou plus complexe)&nbsp;:
<ul><li>échange, ou comment échanger les valeurs de deux variables&nbsp;: problème classique illustrant la notion de variable informatique (voir aussi <a href="Structure_de_donn%C3%A9es" title="Structure de données">Structure de données</a>),</li>
<li>algorithmes de recherche, ou comment retrouver une information dans un ensemble structuré ou non (par exemple <a href="Recherche_dichotomique" title="Recherche dichotomique">Recherche dichotomique</a>),</li>
<li><a href="Algorithme_de_tri" title="Algorithme de tri">algorithme de tri</a>, ou comment trier un ensemble de nombres le plus rapidement possible ou en utilisant le moins de ressources possible,</li>
<li><a href="Probl%C3%A8me_du_voyageur_de_commerce" title="Problème du voyageur de commerce">problème du voyageur de commerce</a>, <a href="Probl%C3%A8me_du_sac_%C3%A0_dos" title="Problème du sac à dos">problème du sac à dos</a>, <a href="Probl%C3%A8me_SAT" title="Problème SAT">problème SAT</a> et autres algorithmes ou approximations de solutions pour les problèmes combinatoires difficiles (dit NP-complets)&nbsp;;</li></ul></li>
<li>algorithmes ou problèmes illustrant la programmation récursive (voir aussi <a href="Algorithme_r%C3%A9cursif" title="Algorithme récursif">algorithme récursif</a>)&nbsp;:
<ul><li><a href="Tours_de_Hano%C3%AF" title="Tours de Hanoï">tours de Hanoï</a>,</li>
<li><a href="Huit_dames" class="mw-redirect" title="Huit dames">huit dames</a>, placer huit dames sur un échiquier sans qu’elles puissent se prendre entre elles,</li>
<li><a href="Suite_de_Conway" title="Suite de Conway">suite de Conway</a>,</li>
<li>algorithme de dessins récursifs (<a href="Fractale" title="Fractale">fractale</a>) pour le <a href="Tapis_de_Sierpi%C5%84ski" title="Tapis de Sierpiński">Tapis de Sierpiński</a>, la <a href="Courbe_du_dragon" title="Courbe du dragon">Courbe du dragon</a>, le <a href="Flocon_de_Koch" title="Flocon de Koch">Flocon de Koch</a>…&nbsp;;</li></ul></li>
<li>algorithmes dans le domaine des mathématiques&nbsp;:
<ul><li>calcul de la <a href="Factorielle" title="Factorielle">factorielle</a> d'un nombre, de la <a href="Fonction_d'Ackermann" title="Fonction d'Ackermann">Fonction d'Ackermann</a> ou de la <a href="Suite_de_Fibonacci" title="Suite de Fibonacci">suite de Fibonacci</a>,</li>
<li><a href="Algorithme_du_simplexe" title="Algorithme du simplexe">algorithme du simplexe</a>, qui minimise une fonction linéaire de variables réelles soumises à des contraintes linéaires,</li>
<li><a href="Fraction_continue_d'un_nombre_quadratique" class="mw-redirect" title="Fraction continue d'un nombre quadratique">fraction continue d'un nombre quadratique</a>, permettant d'extraire une <a href="Racine_carr%C3%A9e" title="Racine carrée">racine carrée</a>, cas particulier de la <a href="M%C3%A9thode_de_Newton" title="Méthode de Newton">méthode de Newton</a>,</li>
<li>dans le domaine de l'algèbre&nbsp;: l'<a href="Unification" title="Unification">algorithme d'unification</a>, le calcul d'une <a href="Bases_de_Gr%C3%B6bner" class="mw-redirect" title="Bases de Gröbner">base de Gröbner</a> d'un idéal de polynôme et plus généralement presque toutes les méthodes de <a href="Calcul_symbolique" class="mw-redirect" title="Calcul symbolique">calcul symbolique</a>,</li>
<li>en <a href="Th%C3%A9orie_des_graphes#Aspect_algorithmique" title="Théorie des graphes">théorie des graphes</a> qui donne lieu à de nombreux algorithmes,</li>
<li><a href="Test_de_primalit%C3%A9" title="Test de primalité">test de primalité</a>&nbsp;;</li></ul></li>
<li>algorithmes pour et dans le domaine de l'informatique&nbsp;:
<ul><li><a href="Cryptologie" title="Cryptologie">cryptologie</a> et <a href="Compression_de_donn%C3%A9es" title="Compression de données">compression de données</a>,</li>
<li><a href="Informatique_musicale" title="Informatique musicale">informatique musicale</a>,</li>
<li><a href="Algorithme_g%C3%A9n%C3%A9tique" title="Algorithme génétique">algorithme génétique</a> en <a href="Informatique_d%C3%A9cisionnelle" title="Informatique décisionnelle">informatique décisionnelle</a>,</li>
<li>analyse et compilation des <a href="Langage_formel" title="Langage formel">langages formels</a> (voir <a href="Compilateur" title="Compilateur">Compilateur</a> et <a href="Interpr%C3%A8te_(informatique)" title="Interprète (informatique)">Interprète (informatique)</a>),</li>
<li><a href="Allocation_de_m%C3%A9moire" title="Allocation de mémoire">allocation de mémoire</a> (<a href="Ramasse-miettes_(informatique)" title="Ramasse-miettes (informatique)">ramasse-miettes</a>).</li></ul></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Notes_et_références"><span id="Notes_et_r.C3.A9f.C3.A9rences"></span>Notes et références</h2></div>
<div class="references-small decimal" style=""><div class="mw-references-wrap mw-references-columns"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a> </span><span class="reference-text"><span class="ouvrage" id="CollardFlajolet"><span class="ouvrage" id="Phillipe_CollardPhilippe_Flajolet">Phillipe Collard et <a href="Philippe_Flajolet" title="Philippe Flajolet">Philippe Flajolet</a>, «&nbsp;<a rel="nofollow" class="external text" href="http://www.universalis.fr/encyclopedie/algorithmique/"><cite style="font-style:normal;">Algorithmique</cite></a>&nbsp;», sur <span class="italique">Encyclopædia universalis</span> <small style="line-height:1em;">(consulté le <time class="nowrap" datetime="2015-03-08" data-sort-value="2015-03-08">8 mars 2015</time>)</small></span></span>.</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a> </span><span class="reference-text">Albert Dauzat, Jean Dubois, Henri Mitterand, <i>Nouveau dictionnaire étymologique et historique</i>, 1971</span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a> </span><span class="reference-text"><span class="ouvrage" id="de_Wronski1811"><span class="ouvrage" id="Hoéné_de_Wronski1811"><a href="Josef_Ho%C3%ABn%C3%A9-Wronski" title="Josef Hoëné-Wronski">Hoéné de Wronski</a>, <cite class="italique">Introduction à la philosophie des mathématiques et technie de l'algorithmie</cite>, Chez Courcier, imprimeur-libraire pour les mathématiques, <time>1811</time> <small style="line-height:1em;">(<a rel="nofollow" class="external text" href="https://gallica.bnf.fr/ark:/12148/bpt6k6225961k.r=algorithmie">lire en ligne</a>)</small><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Introduction+%C3%A0+la+philosophie+des+math%C3%A9matiques+et+technie+de+l%27algorithmie&amp;rft.pub=Chez+Courcier%2C+imprimeur-libraire+pour+les+math%C3%A9matiques&amp;rft.au=Ho%C3%A9n%C3%A9+de+Wronski&amp;rft.date=1811&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AAlgorithmique"></span></span></span></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a> </span><span class="reference-text">Par exemple, l'<a href="Universit%C3%A9_du_Qu%C3%A9bec_%C3%A0_Montr%C3%A9al" title="Université du Québec à Montréal">UQAM</a> propose un cours intitulé «&nbsp;<a rel="nofollow" class="external text" href="https://etudier.uqam.ca/cours?sigle=EDM4600">Algorithmie de base et interactivité</a>&nbsp;», et l'université de Montréal, un cours intitulé «&nbsp;<a rel="nofollow" class="external text" href="https://studium.umontreal.ca/course/info.php?id=48463">Algorithmie et effets audionumériques</a>&nbsp;».</span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a> </span><span class="reference-text"><span class="ouvrage" id="Knuth1972"><span class="ouvrage" id="Donald_Knuth1972"><a href="Donald_Knuth" title="Donald Knuth">Donald Knuth</a>, «&nbsp;<cite style="font-style:normal">Ancient Babylonian Algorithms</cite>&nbsp;», <i><a href="Communications_of_the_ACM" title="Communications of the ACM">Communications of the ACM</a></i>, <abbr class="abbr" title="volume">vol.</abbr>&nbsp;15, <abbr class="abbr" title="numéro">n<sup>o</sup></abbr>&nbsp;7,‎ <time class="nowrap" datetime="1972-07" data-sort-value="1972-07">juillet 1972</time><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=article&amp;rft.atitle=Ancient+Babylonian+Algorithms&amp;rft.jtitle=Communications+of+the+ACM&amp;rft.issue=7&amp;rft.aulast=Knuth&amp;rft.aufirst=Donald&amp;rft.date=1972-07&amp;rft.volume=15&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AAlgorithmique"></span></span></span>, repris dans <span class="ouvrage" id="Knuth1996"><span class="ouvrage" id="Donald_Knuth1996"><a href="Donald_Knuth" title="Donald Knuth">Donald Knuth</a>, <cite class="italique">Selected Papers on Computer Science</cite>, <a href="Addison-Wesley" title="Addison-Wesley">Addison-Wesley</a>, <time>1996</time>, <abbr class="abbr" title="page">p.</abbr>&nbsp;185<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Selected+Papers+on+Computer+Science&amp;rft.pub=Addison-Wesley&amp;rft.aulast=Knuth&amp;rft.aufirst=Donald&amp;rft.date=1996&amp;rft.pages=185&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AAlgorithmique"></span></span></span>, traduit en français sous le titre <i>Algoritmes babyloniens anciens</i> dans <span class="ouvrage" id="Knuth2011"><span class="ouvrage" id="Donald_Knuth2011"><a href="Donald_Knuth" title="Donald Knuth">Donald Knuth</a> (<abbr class="abbr" title="traduction">trad.</abbr>&nbsp;P. Cégielski), <cite class="italique">Éléments pour une histoire de l'informatique</cite>, <a href="Librairie_Eyrolles" class="mw-redirect" title="Librairie Eyrolles">Librairie Eyrolles</a>, <time>2011</time><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=%C3%89l%C3%A9ments+pour+une+histoire+de+l%27informatique&amp;rft.pub=Librairie+Eyrolles&amp;rft.aulast=Knuth&amp;rft.aufirst=Donald&amp;rft.date=2011&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AAlgorithmique"></span></span></span>.</span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><a href="#cite_ref-6">↑</a> </span><span class="reference-text"><span class="ouvrage" id="Proust2014"><span class="ouvrage" id="Christine_Proust2014">Christine Proust, «&nbsp;<cite style="font-style:normal">Mathématiques en Mésopotamie</cite>&nbsp;», <i>Images des Mathématiques</i>,‎ <time class="nowrap" datetime="2014-04-14" data-sort-value="2014-04-14">14 avril 2014</time> <small style="line-height:1em;">(<a rel="nofollow" class="external text" href="http://images.math.cnrs.fr/Mathematiques-en-Mesopotamie">lire en ligne</a>)</small><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=article&amp;rft.atitle=Math%C3%A9matiques+en+M%C3%A9sopotamie&amp;rft.jtitle=Images+des+Math%C3%A9matiques&amp;rft.aulast=Proust&amp;rft.aufirst=Christine&amp;rft.date=2014-04-14&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AAlgorithmique"></span></span></span>.</span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><a href="#cite_ref-7">↑</a> </span><span class="reference-text">Le calcul de <span class="texhtml">π</span> <span class="citation">«&nbsp;est caractéristique des problèmes généraux rencontrés en algorithmique.&nbsp;»</span> <span class="ouvrage" id="CollardFlajolet"><span class="ouvrage" id="Phillipe_CollardPhillipe_Flajolet">Phillipe Collard et Phillipe Flajolet, «&nbsp;<a rel="nofollow" class="external text" href="http://www.universalis.fr/encyclopedie/algorithmique/1-l-exemple-du-calcul-de-p"><cite style="font-style:normal;">Algorithmique&nbsp;: 1. L'exemple du calcul de <span class="texhtml">π</span></cite></a>&nbsp;», sur <span class="italique"><a href="Encyclop%C3%A6dia_universalis" class="mw-redirect" title="Encyclopædia universalis">Encyclopædia universalis</a></span> <small style="line-height:1em;">(consulté le <time class="nowrap" datetime="2015-03-08" data-sort-value="2015-03-08">8 mars 2015</time>)</small></span></span>.</span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><a href="#cite_ref-8">↑</a> </span><span class="reference-text"><a href="Stephen_Wolfram" title="Stephen Wolfram">Stephen Wolfram</a> <span class="ouvrage"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> «&nbsp;<a rel="nofollow" class="external text" href="http://blog.stephenwolfram.com/2015/12/untangling-the-tale-of-ada-lovelace/"><cite style="font-style:normal;" lang="en">Untangling the Tale of Ada Lovelace</cite></a>&nbsp;», sur <span class="italique">blog.stephenwolfram.com</span></span></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><a href="#cite_ref-9">↑</a> </span><span class="reference-text">En <a href="Cryptographie" title="Cryptographie">cryptographie</a>, le terme codage est utilisé dans un sens différent.</span>
</li>
<li id="cite_note-hertel2019-10"><span class="reference-text">Hertel &amp; Delattre V (2019) <i><a rel="nofollow" class="external text" href="https://www.sciencesetavenir.fr/high-tech/intelligence-artificielle/les-algorithmes-sont-partout-leurs-biais-nous-trompent_131820#xtor=EPR-1-">[SEAActu17h</a>-20190302 Les algorithmes sont partout, leurs biais de conception nous trompent]</i>&nbsp;; le 02.03.2019</span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><a href="#cite_ref-11">↑</a> </span><span class="reference-text"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <a href="Moshe_Vardi" title="Moshe Vardi">Moshe Vardi</a>, <i><span class="lang-en" lang="en">Boolean Satisfiability: Theory and Engineering</span></i> <a rel="nofollow" class="external text" href="http://cacm.acm.org/magazines/2014/3/172516-boolean-satisfiability/fulltext">(Communications of the ACM, Vol. 57 Nos. 3, p. 5)</a>.</span>
</li>
</ol></div>
</div>
<div class="mw-heading mw-heading2"><h2 id="Annexes">Annexes</h2></div>
<style data-mw-deduplicate="TemplateStyles:r194021218">
/* start https://fr.wikipedia.org/ */


.mw-parser-output .autres-projets>.titre{text-align:center;margin:0.2em 0}.mw-parser-output .autres-projets>ul{margin:0;padding:0}.mw-parser-output .autres-projets>ul>li{list-style:none;margin:0.2em 0;text-indent:0;padding-left:24px;min-height:20px;text-align:left;display:block}.mw-parser-output .autres-projets>ul>li>a{font-style:italic}@media(max-width:720px){.mw-parser-output .autres-projets{float:none}}


/* end https://fr.wikipedia.org/ */
</style>
<div class="mw-heading mw-heading3"><h3 id="Bibliographie">Bibliographie</h3></div>
<ul><li><span class="ouvrage" id="Knuth1973"><span class="ouvrage" id="Donald_E._Knuth1973"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <a href="Donald_Knuth" title="Donald Knuth">Donald E. Knuth</a>, <cite class="italique" lang="en"><a href="The_Art_of_Computer_Programming" title="The Art of Computer Programming">The Art of Computer Programming</a></cite>, <abbr class="abbr" title="volume">vol.</abbr>&nbsp;2&nbsp;: <span class="lang-en italique" lang="en">Seminumerical algorithms</span>, Reading, Mass, Addison-Wesley Pub. Co, <time>1973</time>, 764&nbsp;<abbr class="abbr" title="pages">p.</abbr> <small style="line-height:1em;">(<a href="International_Standard_Book_Number" title="International Standard Book Number">ISBN</a>&nbsp;<span class="nowrap">978-0-201-89684-8</span> et <span class="nowrap">978-0-321-75104-1</span>, <a href="Online_Computer_Library_Center" title="Online Computer Library Center">OCLC</a>&nbsp;<span class=" noarchive nowrap"><a rel="nofollow" class="external text" href="https://worldcat.org/fr/title/781024586">781024586</a></span>)</small><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=The+Art+of+Computer+Programming&amp;rft.place=Reading%2C+Mass&amp;rft.pub=Addison-Wesley+Pub.+Co&amp;rft.aulast=Knuth&amp;rft.aufirst=Donald+E.&amp;rft.date=1973&amp;rft.volume=2&amp;rft.tpages=764&amp;rft.isbn=978-0-201-89684-8&amp;rft_id=info%3Aoclcnum%2F781024586&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AAlgorithmique"></span></span></span></li>
<li><span class="ouvrage" id="Quercia2002"><span class="ouvrage" id="Michel_Quercia2002">Michel <span class="nom_auteur">Quercia</span>, <cite class="italique">Algorithmique&nbsp;: Cours complet, exercices et problèmes résolus, travaux pratiques</cite>, Vuibert, <time>2002</time>, 303&nbsp;<abbr class="abbr" title="pages">p.</abbr> <small style="line-height:1em;">(<a href="International_Standard_Book_Number" title="International Standard Book Number">ISBN</a>&nbsp;<span class="nowrap">2-7117-7091-5</span>)</small><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Algorithmique&amp;rft.pub=Vuibert&amp;rft.stitle=Cours+complet%2C+exercices+et+probl%C3%A8mes+r%C3%A9solus%2C+travaux+pratiques&amp;rft.aulast=Quercia&amp;rft.aufirst=Michel&amp;rft.date=2002&amp;rft.tpages=303&amp;rft.isbn=2-7117-7091-5&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AAlgorithmique"></span></span></span></li>
<li><span class="ouvrage" id="CormenLeisersonRivestStein2010"><span class="ouvrage" id="Thomas_H._CormenCharles_E._LeisersonRonald_L._RivestClifford_Stein2010"><a href="Thomas_H._Cormen" title="Thomas H. Cormen">Thomas H. <span class="nom_auteur">Cormen</span></a>, <a href="Charles_E._Leiserson" title="Charles E. Leiserson">Charles E. <span class="nom_auteur">Leiserson</span></a>, <a href="Ronald_Rivest" title="Ronald Rivest">Ronald L. <span class="nom_auteur">Rivest</span></a> et <a href="Clifford_Stein" title="Clifford Stein">Clifford <span class="nom_auteur">Stein</span></a> (<abbr class="abbr" title="traduction">trad.</abbr>&nbsp;de l'anglais), <cite class="italique"><a href="Introduction_%C3%A0_l'algorithmique" title="Introduction à l'algorithmique">Algorithmique</a>&nbsp;: Cours avec 957 exercices et 158 problèmes</cite>, <a href="Dunod" class="mw-redirect" title="Dunod">Dunod</a>, <time>2010</time> <small>[détail de l’édition]</small><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Algorithmique&amp;rft.pub=Dunod&amp;rft.stitle=Cours+avec+957+exercices+et+158+probl%C3%A8mes&amp;rft.aulast=Cormen&amp;rft.aufirst=Thomas+H.&amp;rft.au=Leiserson%2C+Charles+E.&amp;rft.au=Rivest%2C+Ronald+L.&amp;rft.au=Stein%2C+Clifford&amp;rft.date=2010&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AAlgorithmique"></span></span></span></li>
<li><span class="ouvrage" id="BoscGuyomardMiclet2019"><span class="ouvrage" id="Patrick_BoscMarc_GuyomardLaurent_Miclet2019">Patrick Bosc, Marc Guyomard et Laurent Miclet, <cite class="italique">Conception d'algorithmes&nbsp;: principes et 150 exercices corrigés</cite>, Paris, Eyrolles, <time>2019</time>, 832&nbsp;<abbr class="abbr" title="pages">p.</abbr> <small style="line-height:1em;">(<a href="International_Standard_Book_Number" title="International Standard Book Number">ISBN</a>&nbsp;<span class="nowrap">978-2-212-67728-7</span>, <a href="Biblioth%C3%A8que_nationale_de_France" title="Bibliothèque nationale de France">BNF</a>&nbsp;<span class=" noarchive nowrap"><a rel="nofollow" class="external text" href="https://catalogue.bnf.fr/ark:/12148/cb456636375.public">45663637</a></span>)</small><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Conception+d%27algorithmes&amp;rft.place=Paris&amp;rft.pub=Eyrolles&amp;rft.stitle=principes+et+150+exercices+corrig%C3%A9s&amp;rft.aulast=Bosc&amp;rft.aufirst=Patrick&amp;rft.au=Marc+Guyomard&amp;rft.au=Laurent+Miclet&amp;rft.date=2019&amp;rft.tpages=832&amp;rft.isbn=978-2-212-67728-7&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AAlgorithmique"></span></span></span></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Articles_connexes">Articles connexes</h3></div>
<ul><li><a href="Algorithme_r%C3%A9cursif" title="Algorithme récursif">Algorithme récursif</a></li>
<li><a href="Algorithme_r%C3%A9parti" class="mw-redirect" title="Algorithme réparti">Algorithme réparti</a></li>
<li><a href="Algorithme_%C3%A9mergent" title="Algorithme émergent">Algorithme émergent</a></li>
<li><a href="Algorithme_adaptatif" title="Algorithme adaptatif">Algorithme adaptatif</a></li>
<li><a href="Algorithme_d'approximation" title="Algorithme d'approximation">Algorithme d'approximation</a></li>
<li><a href="Art_algorithmique" title="Art algorithmique">Art algorithmique</a></li>
<li><a href="Liste_d'algorithmes" title="Liste d'algorithmes">Liste d'algorithmes</a></li>
<li><a href="M%C3%A9taheuristique" title="Métaheuristique">Métaheuristique</a></li>
<li><a href="Recherche_op%C3%A9rationnelle" title="Recherche opérationnelle">Recherche opérationnelle</a></li>
<li><a href="Paradigme_(programmation)" title="Paradigme (programmation)">Paradigme (programmation)</a></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Liens_externes">Liens externes</h3></div>
<p class="mw-empty-elt">
</p>
<ul><li class="mw-empty-elt"></li>
<li class="mw-empty-elt"></li>
<li><div class="liste-horizontale"><span class="wd_identifiers">Notice dans un dictionnaire ou une encyclopédie généraliste</span>&nbsp;: <ul><li><a rel="nofollow" class="external text" href="https://www.universalis.fr/encyclopedie/algorithmique/"><i>Universalis</i></a></li> </ul></div></li>
<li class="mw-empty-elt"></li></ul>
<div class="navbox-container" style="clear:both;">


</div>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer skin-invert-image" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de l'informatique théorique</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2025-06-26" href="https://fr.wikipedia.org/wiki/?title=Algorithmique&amp;oldid=226806957">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>